import { LoggerService, LogLevel } from '@nestjs/common';
import { TypeOrmModuleOptions } from '@nestjs/typeorm';
import { pageInfo } from './pageInterface';

export interface configInterface {
  /**
   * 日志级别
   */
  loggerLevel: false | LoggerService | LogLevel[];
  /**
   * 端口号
   */
  port: number;
  /**
   * 全局路径前缀
   */
  globalPrefix: string;
  /**
   * 无需授权授路径
   */
  noAuthURL: string[];
  /**
   * pageSize  :  一页显示多少
   * pageNumber:  第几页
   */
  page: {
    pageSize: number;
    pageNumber: number;
  };
  /**
   * 文件上传大小 ：fileConf ：避免命名冲突
   */
  fileConf: {
    size: number;
    allowMintType: string[];
  };
  /**
   * swagger
   */
  swagger?: boolean;

  /**
   * 数据库连接 : 注意entity的路径问题
   */
  typeOrm: TypeOrmModuleOptions;
  /**
   * 七牛云配置
   */
  Qiniu: {
    /**
     * AK
     */
    accessKey: string;
    /**
     * sk
     */
    secretKey: string;
    /**
     * bucket name ：桶名称
     */
    bucket: string;
    /**
     *    七牛云上设置的桶：buket对应的域名
     */
    url: string;
  };
  /**
   *
   * @param secret 密钥;
   * @param expire 过期时间 ;
   * @param issuer 发行者
   * @param alg 加密方式
   * 后续：jti (JWT ID)：编号 想法。放在redis里，让jwt黑名单
   *
   */
  jwt: {
    secret: string;
    expire: number | string;
    issuer:string,
    alg:
      | 'HS256'
      | 'HS384'
      | 'HS512'
      | 'RS256'
      | 'RS384'
      | 'RS512'
      | 'PS256'
      | 'PS384'
      | 'PS512'
      | 'ES256'
      | 'ES384'
      | 'ES512';
  };
  /**
   * 限速配置
   */
  rate_limit: {
    windowMs: number;
    max: number;
  };
  /**
   * cros
   */
  corsOptions: {
    origin: string;
    methods: string;
    preflightContinue: boolean;
    optionsSuccessStatus: number; // some legacy browsers (IE11, various SmartTVs) choke on 204
  };

  /**
   * csurf jwt 形式基本不用考虑
   */
  /**
   * 不需要登录验证的请求地址
   */
  noAuthUrls: string[];
}
